package com.example.droolstool.filter;

import com.example.droolstool.base.Constants;
import com.example.droolstool.module.DrlMessageModule;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.kie.api.runtime.rule.AgendaFilter;
import org.kie.api.runtime.rule.Match;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * @Author 赵云龙
 * @Date 2020/6/27
 * @Description TODO
 */

public class ServerAssembleAgendaFilter implements AgendaFilter {

    @Override
    public boolean accept(Match match) {
        String ruleName = match.getRule().getName();
        List<Object> drlMessageModules = match.getObjects();
        if (drlMessageModules != null && drlMessageModules.size() >0) {
            DrlMessageModule drlMessageModule = (DrlMessageModule) drlMessageModules.get(0);
            boolean beginNode =  drlMessageModule != null && (drlMessageModule.getFromId() == null || CollectionUtils.isEmpty(drlMessageModule.getFromId()));
           List<String> executedRuleId = Lists.newArrayList(Constants.executedRuleId);
           boolean when = drlMessageModule != null && StringUtils.equals(ruleName, drlMessageModule.getId()) &&
                   toCompareList(drlMessageModule.getFromId(), executedRuleId) &&  !drlMessageModule.getExecuted();
            if (beginNode || when) {
                return true;
            }
        }
        return false;
    }


    private boolean toCompareList(List fromId, List targetId){

        if (fromId != null && targetId != null) {
            if (targetId.containsAll(fromId)) {
                return  true;
            }
        }
        return false;
    }
}
